//testbench
`timescale  1ns / 1ps//仿真时间单位/仿真时间精度

module testbench_demo;//模块名

parameter PERIOD  = 10;//定义一个常量

// inputs
//按照与demo.v相同的命名，定义一系列输出量和输入量
reg clk=0;
reg rst_n=0;
reg [3:0] i_data;
reg [3:0] q_data;
reg ready_in=0;
reg [1:0] sel=0;

// outputs
wire [4:0] out_data;
wire ready_out;

// generate clk
initial//只执行一次
begin
    forever #(PERIOD/2)  clk=~clk;  //永久循环，产生一个时钟，#代表延时控制，#(PERIOD/2)即#5，即延时5ns（5个时间单位）对其自身取反一次
end

//generate inputs
initial
begin
    #(PERIOD*2) rst_n = 1;//延时20个时间单位即20ns将复位信号赋值为1
    #200//延时200ns
    i_data = 4'd5;//i_data赋值为4位十进制5
    q_data = 4'ha;//q_data赋值为4为十六进制11
    #100//延时100ns
    ready_in = 1;//ready_in赋值为1
    sel = 2'b10;//sel赋值为2'b10
    //全为阻塞赋值
end

//例化的标准写法
demo u_demo(
    .clk(clk),
    .rst_n(rst_n),
    .i_data(i_data),
    .q_data(q_data),
    .ready_in(ready_in),
    .sel(sel),
    .out_data(out_data),
    .ready_out(ready_out)
);

endmodule